/*
 * Copyright 2022 Web3 Labs Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package org.web3j.service;

import org.web3j.crypto.HSMPass;
import org.web3j.crypto.Sign;

/**
 * Request processor to a HSM (hardware security module).
 *
 * @param <T> Object with required parameters to perform request to a HSM.
 */
public interface HSMRequestProcessor<T extends HSMPass> {

    /**
     * Call a HSM (hardware security module)
     *
     * @param dataToSign message hash to sign.
     * @param pass Object with required parameters to perform request to a HSM.
     * @return SignatureData v | r | s
     */
    Sign.SignatureData callHSM(byte[] dataToSign, T pass);
}
